#!/usr/bin/env python3
"""
为用户2新增50个随机商品监控任务的脚本
设置监控时间为明天过期
"""

import sys
import os
import random
from datetime import datetime, timedelta

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app.database import SessionLocal
from app.models.monitor import Monitor, MonitorType, MonitorStatus
# from app.utils.datetime_utils import get_beijing_now

# 北京时间函数（本地定义，避免循环导入）
def get_beijing_now():
    """获取北京时间（UTC+8）"""
    from datetime import datetime, timedelta
    return datetime.utcnow() + timedelta(hours=8)
# 随机商品关键词列表
RANDOM_KEYWORDS = [
    # 电子产品
    "iPhone", "iPad", "MacBook", "AirPods", "Apple Watch", "Nintendo Switch", 
    "PlayStation", "Xbox", "カメラ", "ヘッドホン", "スマートフォン", "タブレット",
    
    # 时尚服饰
    "ナイキ", "アディダス", "ユニクロ", "ZARA", "H&M", "Supreme", "バッグ", 
    "財布", "腕時計", "アクセサリー", "スニーカー", "ジャケット", "ワンピース",
    
    # 美妆护肤
    "化粧品", "スキンケア", "香水", "リップ", "ファンデーション", "アイシャドウ",
    "マスカラ", "美容液", "クリーム", "日焼け止め",
    
    # 家居生活
    "家具", "インテリア", "キッチン用品", "食器", "タオル", "寝具", "照明",
    "収納", "掃除用品", "植物", "花瓶", "クッション",
    
    # 运动健身
    "ランニングシューズ", "ヨガマット", "ダンベル", "プロテイン", "スポーツウェア",
    "水筒", "リュック", "自転車", "テニス", "ゴルフ",
    
    # 书籍文具
    "本", "漫画", "小説", "ビジネス書", "ノート", "ペン", "手帳", "文房具",
    
    # 食品饮料
    "コーヒー", "紅茶", "お菓子", "チョコレート", "ワイン", "日本酒", "調味料",
    
    # 玩具游戏
    "フィギュア", "プラモデル", "ボードゲーム", "パズル", "ぬいぐるみ", "レゴ",
    
    # 汽车用品
    "カー用品", "タイヤ", "カーナビ", "ドライブレコーダー", "洗車用品",
    
    # 宠物用品
    "ペット用品", "ドッグフード", "キャットフード", "首輪", "おもちゃ"
]



def create_random_monitors(user_id: int = 2, count: int = 50):
    """
    为指定用户创建随机监控任务
    
    Args:
        user_id: 用户ID，默认为2
        count: 创建的监控任务数量，默认为50
    """
    db = SessionLocal()
    
    try:
        # 计算明天的过期时间（24小时后）
        tomorrow = get_beijing_now() + timedelta(days=1)
        
        monitors_created = []
        
        for i in range(count):
            # 随机选择检查间隔（10秒档为主，其他档位为辅）
            check_intervals = [10, 10, 10, 10, 10, 15, 15, 5, 3]  # 10秒档占比更高
            check_interval = random.choice(check_intervals)

            # 只创建关键词监控
            keyword = random.choice(RANDOM_KEYWORDS)
            monitor = Monitor(
                user_id=user_id,
                monitor_type=MonitorType.KEYWORD,
                name=f"关键词监控: {keyword}",
                description=f"自动生成的{keyword}商品监控任务",
                conditions={"keyword": keyword, "include_description": True},
                status=MonitorStatus.ACTIVE,
                is_active=True,
                duration_hours=24,
                check_interval=check_interval,
                started_at=get_beijing_now(),
                expires_at=tomorrow,
                total_found=0,
                total_notified=0
            )
            
            db.add(monitor)
            monitors_created.append(monitor)
        
        # 提交所有监控任务
        db.commit()
        
        # 统计创建结果
        interval_counts = {}

        for monitor in monitors_created:
            # 统计检查间隔
            interval = monitor.check_interval
            interval_counts[interval] = interval_counts.get(interval, 0) + 1

        print(f"✅ 成功为用户{user_id}创建了{count}个关键词监控任务")
        print(f"📅 过期时间: {tomorrow.strftime('%Y-%m-%d %H:%M:%S')}")
        print(f"📊 监控类型: 全部为关键词监控 (KEYWORD)")

        print("\n⏰ 检查间隔分布:")
        for interval, count in sorted(interval_counts.items()):
            print(f"  {interval}秒档: {count}个")
        
        print(f"\n🎯 监控任务ID范围: {monitors_created[0].id} - {monitors_created[-1].id}")
        
    except Exception as e:
        db.rollback()
        print(f"❌ 创建监控任务失败: {e}")
        raise
    finally:
        db.close()

def main():
    """主函数"""
    print("🚀 开始创建随机关键词监控任务...")
    print("=" * 10)

    # 为用户2创建50个随机关键词监控任务
    create_random_monitors(user_id=2, count=10)

    print("=" * 50)
    print("✅ 脚本执行完成！")
    print("\n💡 提示:")
    print("- 所有监控任务已设置为ACTIVE状态")
    print("- 监控类型：全部为关键词监控 (KEYWORD)")
    print("- 过期时间设置为明天同一时间")
    print("- 检查间隔以10秒档为主")
    print("- 可以通过管理界面查看和管理这些监控任务")

if __name__ == "__main__":
    main()
